package cn.cleanarch.infra.idp.s3.controller;

import cn.cleanarch.infra.idp.commons.domain.dto.PageResult;
import cn.cleanarch.infra.idp.s3.domain.dto.S3ConfigDTO;
import cn.cleanarch.infra.idp.s3.domain.query.S3ConfigQuery;
import cn.cleanarch.infra.idp.s3.service.S3ConfigService;
import cn.cleanarch.infra.idp.web.model.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * S3配置管理控制器
 */
@RestController
@RequestMapping("/s3-config")
public class S3ConfigController {

    @Autowired
    private S3ConfigService s3ConfigService;

    /**
     * 分页查询S3配置
     */
    @GetMapping
    public Result pageQuery(S3ConfigQuery query) {
        PageResult<S3ConfigDTO> result = s3ConfigService.pageQuery(query);
        return Result.data(result);
    }

    /**
     * 根据ID获取S3配置
     */
    @GetMapping("/{id}")
    public Result getById(@PathVariable("id") Long id) {
        cn.cleanarch.infra.idp.s3.domain.entity.S3Config config = s3ConfigService.getById(id);
        S3ConfigDTO dto = new S3ConfigDTO();
        // 手动转换实体到DTO，避免暴露敏感信息如secretKey
        dto.setId(config.getId());
        dto.setName(config.getName());
        dto.setBusinessType(config.getBusinessType());
        dto.setEndpoint(config.getEndpoint());
        dto.setAccessKey(config.getAccessKey());
        dto.setBasePath(config.getBasePath());
        // 不返回secretKey
        dto.setBucket(config.getBucket());
        dto.setRegion(config.getRegion());
        dto.setDescription(config.getDescription());
        dto.setEnabled(config.getEnabled());
        return Result.data(dto);
    }

    /**
     * 创建S3配置
     */
    @PostMapping
    public Result create(@RequestBody S3ConfigDTO dto) {
        S3ConfigDTO result = s3ConfigService.create(dto);
        return Result.data(result);
    }

    /**
     * 更新S3配置
     */
    @PutMapping
    public Result update(@RequestBody S3ConfigDTO dto) {
        S3ConfigDTO result = s3ConfigService.update(dto);
        return Result.data(result);
    }

    /**
     * 删除S3配置
     */
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable("id") Long id) {
        Boolean success = s3ConfigService.delete(id);
        return Result.data(success);
    }

    /**
     * 测试S3连接
     */
    @PostMapping("/{id}/test")
    public Result testConnection(@PathVariable("id") Long id) {
        Boolean success = s3ConfigService.testConnection(id);
        return Result.data(success);
    }

    /**
     * 获取S3配置状态
     */
    @GetMapping("/status")
    public Result getStatus() {
        return Result.data(s3ConfigService.getStatus());
    }

    /**
     * 获取S3缓存状态
     */
    @GetMapping("/cache-status")
    public Result getCacheStatus() {
        return Result.data(s3ConfigService.getCacheStatus());
    }
}